package com.example.wisdomclassroomapi.facade.controller.api;

// TODO  分片上传 放弃此功能
//@RestController
//@RequestMapping("/api/file")
//public class UploadController extends BaseController {
//    @Resource
//    private FilePeriodDomainService filePeriodService;
//
//    // 设置图片上传路径
//    @Value("${file.basepath}")
//    private String basePath;
//
//    @RequestMapping("/show")
//    public String show(){
//        return "file";
//    }
//
//    /**
//     * 上传
//     * @param file
//     * @param suffix
//     * @param shardIndex
//     * @param shardSize
//     * @param shardTotal
//     * @param size
//     * @param key
//     * @return
//     * @throws IOException
//     * @throws InterruptedException
//     */
//    @RequestMapping("/upload")
//    @ResponseBody
//    public String upload(MultipartFile file,
//                         String suffix,
//                         Integer shardIndex,
//                         Integer shardSize,
//                         Integer shardTotal,
//                         Long size,
//                         String key
//    ) throws IOException, InterruptedException {
//        //文件的名称
//        String name = UUID.randomUUID().toString().replaceAll("-", "");
//        // 获取文件的扩展名
//        String ext = FilenameUtils.getExtension(file.getOriginalFilename());
//
//        //设置图片新的名字
//        String fileName = new StringBuffer().append(key).append(".").append(suffix).toString(); // course\6sfSqfOwzmik4A4icMYuUe.mp4
//        //这个是分片的名字
//        String localfileName = new StringBuffer(fileName)
//                .append(".")
//                .append(shardIndex)
//                .toString(); // course\6sfSqfOwzmik4A4icMYuUe.mp4.1
//
//        // 以绝对路径保存重名命后的图片
//        File targeFile=new File(basePath,localfileName);
//        //上传这个图片
//        file.transferTo(targeFile);
//        //数据库持久化这个数据
//        FilePeriodEntity file1=new FilePeriodEntity();
//        file1.setPath(basePath+localfileName);
//        file1.setName(name);
//        file1.setSuffix(ext);
//        file1.setSize(size);
//        file1.setPeriodIndex(shardIndex);
//        file1.setPeriodSize(shardSize);
//        file1.setPeriodTotal(shardTotal);
//        file1.setFileKey(key);
//        //插入到数据库中
//        //保存的时候 去处理一下 这个逻辑
//        filePeriodService.save(file1);
//        //判断当前是不是最后一个分页 如果不是就继续等待其他分页  合并分页
//        if(shardIndex .equals(shardTotal) ){
//            file1.setPath(basePath+fileName);
//            this.merge(file1);
//        }
//        return "上传成功";
//    }
//
//    @RequestMapping("/check")
//    @ResponseBody
//    public Boolean check(String key){
//        List<FilePeriodEntity> check = filePeriodService.check(key);
//        //如果这个key存在的话 那么就获取上一个分片去继续上传
//        if(check.size()!=0){
//            return true;
//        }
//        return false;
//    }
//
//
//    /**
//     * @author fengxinglie
//     * 合并分页
//     */
//    private void merge(FilePeriodEntity fileDTO) throws FileNotFoundException, InterruptedException {
//        //合并分片开始
//        String path = fileDTO.getPath(); //获取到的路径 没有.1 .2 这样的东西
//        //截取视频所在的路径
//        path = path.replace(basePath,"");
//        Integer shardTotal= fileDTO.getPeriodTotal();
//        File newFile = new File(basePath + path);
//        FileOutputStream outputStream = new FileOutputStream(newFile,true); // 文件追加写入
//        FileInputStream fileInputStream = null; //分片文件
//        byte[] byt = new byte[10 * 1024 * 1024];
//        int len;
//        try {
//            for (int i = 0; i < shardTotal; i++) {
//                // 读取第i个分片
//                fileInputStream = new FileInputStream(new File(basePath + path + "." + (i + 1))); //  course\6sfSqfOwzmik4A4icMYuUe.mp4.1
//                while ((len = fileInputStream.read(byt)) != -1) {
//                    outputStream.write(byt, 0, len);
//                }
//            }
//        } catch (IOException e) {
//            throw new ApplicationException("999999","文件分片错误");
//        } finally {
//            try {
//                if (fileInputStream != null) {
//                    fileInputStream.close();
//                }
//                outputStream.close();
//            } catch (Exception e) {
//                throw new ApplicationException("999999","IO错误");
//            }
//        }
//        //告诉java虚拟机去回收垃圾 至于什么时候回收  这个取决于 虚拟机的决定
//        System.gc();
//        //等待100毫秒 等待垃圾回收去 回收完垃圾
//        Thread.sleep(100);
//        for (int i = 0; i < shardTotal; i++) {
//            String filePath = basePath + path + "." + (i + 1);
//            File file = new File(filePath);
//        }
//    }
//}
